我们在研究贝塞尔曲线的时候,首先遇到的就是伯恩斯坦多项式(Bernstein polynomial),为此,有必要专门开出一篇文章来探讨伯恩斯坦多项式的性质。当伯恩斯坦系数是二维平面中的一系列固定点时,伯恩斯坦多项式就演变成了贝塞尔曲线。

从定义出发,伯恩斯坦多项式的第n阶项有如下形式:

$$b_{i,n}(t) = \binom{n}{i}\cdot t^{i} \cdot (1-t)^{(n-i)}, \quad t\in[0, 1]$$

其中 i=0, 1, …, n, 而$\binom{n}{i} = \frac{n!}{i!(n-i)!}$是二项式系数。

伯恩斯坦 n 阶多项式可以形成一组 n 阶指数多项式的基底。一般伯恩斯坦多项式可以表示为:

$$B_n(t) = \sum_{i=0}^{n}\beta_i \cdot b_{i, n}(t)$$

其中,$\beta_i$ 叫做伯恩斯坦系数。读者看到这个形式可能一下子就联想到贝塞尔曲线了。是的,这就是贝塞尔曲线的函数形式。

性质

伯恩斯坦多项式满足如下性质:

  • 对称性:$b_{i,n}(t) = b_{n-i,n}(1-t)$

  • 正性:$b_{i,n}(t) \geqslant 0$

  • 归一化:$\sum_{i=0}^{n}b_{i, n}(t) = 1$

  • 极值:

当 $i\neq 0, n$ 时,$b_{i,n}(t)$ 有且只有一个极大值点,位于 $t=\frac{i}{n}$,值为

$b_{i,n}(\frac{i}{n}) = i^i\cdot n^{-n} \cdot (n-i)^{n-i} \binom{n}{i}$

  • 临近项关系

伯恩斯坦多项式的项总是可以表示为两个比他高一阶项的线性组合

$b_{i,n-1}(t) = \frac{n-i}{n}b_{i,n}(t) + \frac{i+1}{n}b_{i+1,n}(t)$

而其导数可以表示为两个低一阶项的线性组合

$b_{i,n}^{‘}(t) = n\cdot[b_{i-1,n-1}(t)-b_{i,n-1}(t)]$

当然这里需要考虑到一个约定,即当 i<0 或 i>n 时,$\binom{n}{i} = 0$

这是很容易理解的。二阶项系数的含义是在不考虑顺序的情况下,从 n 中挑选出子集大小为 i 的可能性有多少。当 i<0 或 i>n 时,其可能性当然为零。

由此,我们也知道,当 i<0 或 i>n 时,$b_{i,n}(t) = 0$

  • 端点:

当 t=0 或 t=1 时,其结果满足

$\begin{align} b_{i,n}(0) &= \delta_{i, 0} \newline b_{i,n}(1) &= \delta_{i, n} \end{align}$,

其中,$\delta_{i,j} = \begin{cases} 0, &i \neq j \newline 1, &i = j \end{cases}$,是 Kronecker $\delta$ 函数。

  • 积分:$\int_{0}^{1} b_{i,n}(t) dt = \frac{1}{n+1}$

多项式前几阶结果

通过求取多项式的前几阶结果,并画出相应的函数图,可以很直观地验证上述伯恩斯坦多项式的几个性质。

零阶:

$\begin{align} b_{0,0}(t) &= 1 \end{align}$

一阶:

$\begin{align} b_{0,1}(t) &= 1-t \newline b_{1,1}(t) &= t \end{align}$

二阶:

$\begin{align} b_{0,2}(t) &= (1-t)^2 \newline b_{1,2}(t) &= 2(1-t)t \newline b_{2,2}(t) &= t^2 \end{align}$

三阶:

$\begin{align} b_{0,3}(t) &= (1-t)^3 \newline b_{1,3}(t) &= 3(1-t)^2t \newline b_{2,3}(t) &= 3(1-t)t^2 \newline b_{3,3}(t) &= t^3 \end{align}$

四阶:

$\begin{align} b_{0, 4}(t) &= (1-t)^4 \newline b_{1, 4}(t) &= 4(1-t)^3t \newline b_{2, 4}(t) &= 6(1-t)^2t^2 \newline b_{3, 4}(t) &= 4(1-t)t^3 \newline b_{4, 4}(t) &= t^4 \end{align}$

五阶:

$\begin{align} b_{0, 5}(t) &= (1-t)^5 \newline b_{1, 5}(t) &= 5(1-t)^4t \newline b_{2, 5}(t) &= 10(1-t)^3t^2 \newline b_{3, 5}(t) &= 10(1-t)^2t^3 \newline b_{4, 5}(t) &= 5(1-t)t^4 \newline b_{5, 5}(t) &= t^5 \end{align}$

贝塞尔曲线

伯恩斯坦多项式的一般形式

$B_n(t) = \sum_{i=0}^{n}\beta_i \cdot b_{i, n}(t)$

其中,$b_{i,n}(t) = \binom{n}{i}\cdot t^{i} \cdot (1-t)^{(n-i)}, \quad t\in[0, 1]$

是 n 阶伯恩斯坦基底多项式。而 $\beta_i$ 叫做伯恩斯坦系数。当伯恩斯坦系数是二维平面中的一系列固定点时,伯恩斯坦多项式就演变成了贝塞尔曲线。

我们先来看一个三阶贝塞尔曲线的例子:

在该例子中,共有四个坐标点(控制点)。读者可以尝试拖动四个控制点,看看贝塞尔曲线的形态变化。

结合伯恩斯坦多项式的前几阶展开式,我们可以得到相应的贝塞尔曲线形式。

线性曲线

对一阶伯恩斯坦多项式展开,得到如下形式:

$B(t) = P_0 \cdot (1-t) + P_1 \cdot t = P_0 + (P_1 – P_0) \cdot t$

从公式可以看出,二阶展开式对应的是介于 $P_0$和 $P_1$ 之间的线性插值点。其动态效果如下:

二次方曲线

对二阶伯恩斯坦多项式展开,得到如下形式:$B(t) = P_0 \cdot (1-t)^2 + P_1\cdot 2(1-t)t + P_2 \cdot t^2$

B(t) 对 t 求导,得到下式:$B’(t) = 2(1-t)\cdot (P_1 – P_0) + 2t\cdot (P_2 – P_1)$

把两个端点代入式子中:

$$\begin{align} B’(0) &= 2 (P_1 – P_0) \newline B’(1) &= 2 (P_2 – P_1) \end{align}$$

这个结果显示,位于 $P_0$ 和 $P_2$ 点的两条切线相交于 $P_1$ 点。而当 t 从 0 逐渐变化到 1 的过程中, B(t) 点处的切线会从 $P_0P_1$ 直线逐渐过渡到 $P_1P_2$ 直线。其动态效果如下:

读者可以尝试拖动三个坐标点(控制点)看看曲线和切线的形态变化。

三次方曲线

和二次方曲线类似,我们先写出展开式:

$B(t) = P_0 \cdot (1-t)^3 + P_1\cdot 3(1-t)^2t + P_2 \cdot 3(1-t)t^2 + P_3 \cdot t^3$

接着对展开式求导,得到如下结果:

$B’(t) = 3(1-t)^2\cdot (P_1 – P_0) + 6(1-t)t\cdot (P_2 – P_1) + 3t^2\cdot(P_3 – P_2)$

代入端点值:

$\begin{align} B’(0) &= 3 (P_1 – P_0) \newline B’(1) &= 3 (P_3 – P_2) \end{align}$

结果显示,位于 $P_0$和 $P_2$ 点的两条切线分别相交于 $P_1$ 点和 $P_2$ 点。而当 t 从 0 逐渐变化到 1 的过程中,B(t) 点处的切线会从 $P_0P_1$直线逐渐过渡到 $P_2P_3$ 直线。其动态效果如下:

读者同样可以尝试拖动四个坐标点(控制点)来看看曲线和切线的形态变化。

四次方曲线和更高次的曲线,我们不做详细的讨论,只做动态曲线演示。其结论的推导方式和三次方、二次方曲线类似。感兴趣的读者可以自己推导。

四次方曲线

五次方曲线

参考